home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / cmdity / yk212src.lha / Yak_2.12_Src / Hotkey_types.c < prev    next >
C/C++ Source or Header  |  1995-12-31  |  23KB  |  595 lines

  1. #define __USE_SYSBASE
  2.  
  3. #include <proto/exec.h>
  4. #include <proto/commodities.h>
  5.  
  6. #include <clib/alib_protos.h>
  7.  
  8. #include <exec/types.h>
  9. #include <exec/memory.h>
  10. #include <string.h>
  11.  
  12. #include "code.h"
  13. #include "yak.h"
  14. #include "hotkey_types.h"
  15. #include "Requesters.h"
  16.  
  17. #define CATCOMP_NUMBERS
  18. #include "yak_locale_strings.h"
  19.  
  20.  
  21.  
  22.  
  23. #define END_OPTION { NO_OPT }
  24.  
  25. #ifdef PREFS
  26.  
  27. # define OPTION_DESCRIPTION(Type, LocalID, LabelID, ExcludeIDs, ActivateIDs, DisplayID, DefFlag, DefArgStr, DefArgNum) {Type, LocalID, LabelID, ExcludeIDs, ActivateIDs, DisplayID, DefFlag, DefArgStr, DefArgNum}
  28.  
  29. #elif defined(CONV)
  30.  
  31. # define OPTION_DESCRIPTION(Type, LocalID, LabelID, ExcludeIDs, ActivateIDs, DisplayID, DefFlag, DefArgStr, DefArgNum) {Type, LocalID, DefFlag, DefArgStr, DefArgNum}
  32.  
  33. #else
  34.  
  35. # define OPTION_DESCRIPTION(Type, LocalID, LabelID, ExcludeIDs, ActivateIDs, DisplayID, DefFlag, DefArgStr, DefArgNum) {Type, LocalID}
  36.  
  37. #endif
  38.  
  39.  
  40. OptDescription ChangeScreenHKOption[4] = {
  41.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_NO_SCREEN_CHANGE,        NO_SCREEN_CHANGE_OPT,        HKO_WORKBENCH_TO_FRONT|HKO_DEFAULT_PUBSCR_TO_FRONT, 0, 0, HKO_NO_SCREEN_CHANGE, NULL, 0),
  42.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_WORKBENCH_TO_FRONT,      WORKBENCH_TO_FRONT_OPT,      HKO_NO_SCREEN_CHANGE|HKO_DEFAULT_PUBSCR_TO_FRONT,   0, 1, 0,                    NULL, 0),
  43.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_DEFAULT_PUBSCR_TO_FRONT, DEFAULT_PUBSCR_TO_FRONT_OPT, HKO_NO_SCREEN_CHANGE|HKO_WORKBENCH_TO_FRONT,        0, 2, 0,                    NULL, 0),
  44.    END_OPTION 
  45. };
  46.  
  47. OptDescription CommandHKOption[7] = {
  48.    OPTION_DESCRIPTION( TOGGLE_OPT,  HKO_CLI_COMMAND     , CLI_OPT       , HKO_AREXX_COMMAND, HKO_STACK_COMMAND|HKO_PRIORITY_COMMAND, 0, HKO_CLI_COMMAND,      NULL, 0),
  49.    OPTION_DESCRIPTION( TOGGLE_OPT,  HKO_AREXX_COMMAND   , AREXX_OPT     , HKO_CLI_COMMAND,   HKO_AREXX_PORT,                         3, 0,                    NULL, 0),
  50.    OPTION_DESCRIPTION( INTEGER_OPT, HKO_STACK_COMMAND   , STACK_OPT     , 0,                 0,                                      1, HKO_STACK_COMMAND,    NULL, 4000),
  51.    OPTION_DESCRIPTION( INTEGER_OPT, HKO_PRIORITY_COMMAND, PRIORITY_OPT  , 0,                 0,                                      2, HKO_PRIORITY_COMMAND, NULL, 0),
  52.    OPTION_DESCRIPTION( STRING_OPT,  HKO_COMMAND         , COMMAND_OPT   , 0,                 0,                                      5, 0,                    NULL, 0),
  53.    OPTION_DESCRIPTION( STRING_OPT,  HKO_AREXX_PORT      , AREXX_PORT_OPT, 0,                 0,                                      4, HKO_AREXX_PORT,       "AREXX", 0),
  54.    END_OPTION 
  55. };
  56.  
  57. OptDescription SelectWindowHKOption[5] = {
  58.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_ACTIVE,      ACTIVE_WINDOW_OPT,     HKO_UNDER_MOUSE|HKO_BY_TITLE, 0,           0, HKO_ACTIVE, NULL, 0 ),
  59.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_UNDER_MOUSE, WINDOW_UNDER_MOUSE_OPT,HKO_ACTIVE|HKO_BY_TITLE,      0,           1, 0,          NULL, 0 ),
  60.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_BY_TITLE,    BY_WINDOW_TITLE_OPT,   HKO_ACTIVE|HKO_UNDER_MOUSE,   HKO_PATTERN, 2, 0,          NULL, 0 ),
  61.    OPTION_DESCRIPTION( STRING_OPT, HKO_PATTERN,     PATTERN_OPT,           0,                            0,           3, 0,          NULL, 0 ),
  62.    END_OPTION 
  63. };
  64.  
  65. OptDescription SelectScreen0HKOption[6] = {
  66.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_FRONTMOST,   FRONTMOST_SCREEN_OPT,  HKO_ACTIVE|HKO_UNDER_MOUSE|HKO_BY_TITLE,    0,           0, HKO_FRONTMOST, NULL, 0 ),
  67.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_ACTIVE,      ACTIVE_SCREEN_OPT,     HKO_FRONTMOST|HKO_UNDER_MOUSE|HKO_BY_TITLE, 0,           1, 0,             NULL, 0 ),
  68.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_UNDER_MOUSE, SCREEN_UNDER_MOUSE_OPT,HKO_FRONTMOST|HKO_ACTIVE|HKO_BY_TITLE,      0,           2, 0,             NULL, 0 ),
  69.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_BY_TITLE,    BY_SCREEN_TITLE_OPT,   HKO_FRONTMOST|HKO_ACTIVE|HKO_UNDER_MOUSE,   HKO_PATTERN, 3, 0,             NULL, 0 ),
  70.    OPTION_DESCRIPTION( STRING_OPT, HKO_PATTERN,     PATTERN_OPT,           0,                                          0,           4, 0,             NULL, 0 ),
  71.    END_OPTION 
  72. };
  73.  
  74. OptDescription SelectScreen1HKOption[6] = {
  75.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_REARMOST,    REARMOST_SCREEN_OPT,   HKO_ACTIVE|HKO_UNDER_MOUSE|HKO_BY_TITLE,   0,           0, HKO_REARMOST, NULL, 0 ),
  76.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_ACTIVE,      ACTIVE_SCREEN_OPT,     HKO_REARMOST|HKO_UNDER_MOUSE|HKO_BY_TITLE, 0,           1, 0,            NULL, 0 ),
  77.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_UNDER_MOUSE, SCREEN_UNDER_MOUSE_OPT,HKO_REARMOST|HKO_ACTIVE|HKO_BY_TITLE,      0,           2, 0,            NULL, 0 ),
  78.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_BY_TITLE,    BY_SCREEN_TITLE_OPT,   HKO_REARMOST|HKO_ACTIVE|HKO_UNDER_MOUSE,   HKO_PATTERN, 3, 0,            NULL, 0 ),
  79.    OPTION_DESCRIPTION( STRING_OPT, HKO_PATTERN,     PATTERN_OPT,           0,                                         0,           4, 0,            NULL, 0 ),
  80.    END_OPTION 
  81. };
  82.  
  83.  
  84. OptDescription ResizeWindowHKOption[4] = {
  85.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_RESIZE_HORIZONTAL,  RESIZE_HORIZONTAL_OPT,  0, 0,                      0, HKO_RESIZE_HORIZONTAL,  NULL, 0 ),
  86.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_RESIZE_VERTICAL,    RESIZE_VERTICAL_OPT,    0, HKO_RESIZE_VISIBLE_BAR, 1, HKO_RESIZE_VERTICAL,    NULL, 0 ),
  87.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_RESIZE_VISIBLE_BAR, VISIBLE_SCREEN_BAR_OPT, 0, 0,                      2, HKO_RESIZE_VISIBLE_BAR, NULL, 0 ),
  88.    END_OPTION 
  89. };
  90.  
  91. OptDescription MoveWindowHKOption[10] = {
  92.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_NO_VERTICAL_MOVING,     NO_VERTICAL_MOVING_OPT,     HKO_MOVE_TOP|HKO_MOVE_VERTICAL_CENTER|HKO_MOVE_BOTTOM,              HKO_MOVE_VISIBLE_BAR, 0, 0,                    NULL, 0 ),
  93.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_TOP,               MOVE_TOP_OPT,               HKO_NO_VERTICAL_MOVING|HKO_MOVE_VERTICAL_CENTER|HKO_MOVE_BOTTOM,    HKO_MOVE_VISIBLE_BAR, 1, HKO_MOVE_TOP,         NULL, 0 ),
  94.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_VERTICAL_CENTER,   MOVE_VERTICAL_CENTER_OPT,   HKO_NO_VERTICAL_MOVING|HKO_MOVE_TOP|HKO_MOVE_BOTTOM,                0,                    2, 0,                    NULL, 0 ),
  95.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_BOTTOM,            MOVE_BOTTOM_OPT,            HKO_NO_VERTICAL_MOVING|HKO_MOVE_VERTICAL_CENTER|HKO_MOVE_TOP,       0,                    3, 0,                    NULL, 0 ),
  96.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_VISIBLE_BAR,       VISIBLE_SCREEN_BAR_OPT,     0,                                                                  0,                    4, HKO_MOVE_VISIBLE_BAR, NULL, 0 ),
  97.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_NO_HORIZONTAL_MOVING,   NO_HORIZONTAL_MOVING_OPT,   HKO_MOVE_LEFT|HKO_MOVE_HORIZONTAL_CENTER|HKO_MOVE_RIGHT,            0,                    5, 0,                    NULL, 0 ),
  98.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_LEFT,              MOVE_LEFT_OPT,              HKO_NO_HORIZONTAL_MOVING|HKO_MOVE_HORIZONTAL_CENTER|HKO_MOVE_RIGHT, 0,                    6, HKO_MOVE_LEFT,                    NULL, 0 ),
  99.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_HORIZONTAL_CENTER, MOVE_HORIZONTAL_CENTER_OPT, HKO_NO_HORIZONTAL_MOVING|HKO_MOVE_LEFT|HKO_MOVE_RIGHT,              0,                    7, 0,                    NULL, 0 ),
  100.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_RIGHT,             MOVE_RIGHT_OPT,             HKO_NO_HORIZONTAL_MOVING|HKO_MOVE_HORIZONTAL_CENTER|HKO_MOVE_LEFT,  0,                    8, 0,                    NULL, 0 ),
  101.    END_OPTION 
  102. };
  103.  
  104. OptDescription InsertDateHKOption[2] = {
  105.    OPTION_DESCRIPTION( STRING_OPT, HKO_DATE_FORMAT, DATE_FORMAT_OPT, 0, 0, 0, 0, NULL, 0 ),
  106.    END_OPTION 
  107. };
  108.  
  109. OptDescription InsertTextHKOption[3] = {
  110.    OPTION_DESCRIPTION( STRING_OPT,  HKO_INSERT_STRING, INSERT_OPT,          0, 0, 0, 0, NULL, 0 ),
  111.    OPTION_DESCRIPTION( INTEGER_OPT, HKO_INSERT_DELAY,  INSERT_DELAY_OPT,    0, 0, 1, HKO_INSERT_DELAY,    NULL, 0 ),
  112.    END_OPTION 
  113. };
  114.  
  115. OptDescription MenuHKOption[5] = {
  116.    OPTION_DESCRIPTION( INTEGER_OPT, HKO_MENU_NUMBER,    MENU_NUMBER_OPT,    0, 0,                  0, HKO_MENU_NUMBER,    NULL, 0 ),
  117.    OPTION_DESCRIPTION( INTEGER_OPT, HKO_ITEM_NUMBER,    ITEM_NUMBER_OPT,    0, 0,                  1, HKO_ITEM_NUMBER,    NULL, 0 ),
  118.    OPTION_DESCRIPTION( TOGGLE_OPT,  HKO_SUBITEM,        SUBITEM_OPT    ,    0, HKO_SUBITEM_NUMBER, 2, 0,                  NULL, 0 ),
  119.    OPTION_DESCRIPTION( INTEGER_OPT, HKO_SUBITEM_NUMBER, SUBITEM_NUMBER_OPT, 0, 0,                  3, HKO_SUBITEM_NUMBER, NULL, 0 ),
  120.    END_OPTION 
  121. };
  122.  
  123. OptDescription CycleWindowsHKOption[6] = {
  124.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_BACK_CYCLE         , Back_Cycle_OPT        , 0, 0,                     0, 0, NULL, 0 ),
  125.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_EXCLUDE_WB_DRAWERS , Exclude_Wb_Drawers_OPT, 0, 0,                     1, 0, NULL, 0 ),
  126.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_BY_WINDOW_TASK_NAME, By_Task_Name_OPT      , 0, HKO_TASK_NAME_PATTERN, 3, 0, NULL, 0 ),
  127.    OPTION_DESCRIPTION( STRING_OPT, HKO_TASK_NAME_PATTERN  , PATTERN_OPT           , 0, 0,                     4, 0, NULL, 0 ),
  128.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_ACTIVATE_ONLY      , ACTIVATE_ONLY_OPT     , 0, 0,                     2, 0, NULL, 0 ),
  129.    END_OPTION 
  130. };
  131.  
  132. OptDescription MoveScreenHKOption[10] = {
  133.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_NO_VERTICAL_MOVING,     NO_VERTICAL_MOVING_OPT,     HKO_MOVE_TOP|HKO_MOVE_VERTICAL_CENTER|HKO_MOVE_BOTTOM,              0, 0, 0,             NULL, 0 ),
  134.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_TOP,               MOVE_TOP_OPT,               HKO_NO_VERTICAL_MOVING|HKO_MOVE_VERTICAL_CENTER|HKO_MOVE_BOTTOM,    0, 1, HKO_MOVE_TOP,  NULL, 0 ),
  135.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_VERTICAL_CENTER,   MOVE_VERTICAL_CENTER_OPT,   HKO_NO_VERTICAL_MOVING|HKO_MOVE_TOP|HKO_MOVE_BOTTOM,                0, 2, 0,             NULL, 0 ),
  136.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_BOTTOM,            MOVE_BOTTOM_OPT,            HKO_NO_VERTICAL_MOVING|HKO_MOVE_VERTICAL_CENTER|HKO_MOVE_TOP,       0, 3, 0,             NULL, 0 ),
  137.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_NO_HORIZONTAL_MOVING,   NO_HORIZONTAL_MOVING_OPT,   HKO_MOVE_LEFT|HKO_MOVE_HORIZONTAL_CENTER|HKO_MOVE_RIGHT,            0, 4, HKO_MOVE_LEFT, NULL, 0 ),
  138.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_LEFT,              MOVE_LEFT_OPT,              HKO_NO_HORIZONTAL_MOVING|HKO_MOVE_HORIZONTAL_CENTER|HKO_MOVE_RIGHT, 0, 5, 0,             NULL, 0 ),
  139.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_HORIZONTAL_CENTER, MOVE_HORIZONTAL_CENTER_OPT, HKO_NO_HORIZONTAL_MOVING|HKO_MOVE_LEFT|HKO_MOVE_RIGHT,              0, 6, HKO_MOVE_LEFT, NULL, 0 ),
  140.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_RIGHT,             MOVE_RIGHT_OPT,             HKO_NO_HORIZONTAL_MOVING|HKO_MOVE_HORIZONTAL_CENTER|HKO_MOVE_LEFT,  0, 7, 0,             NULL, 0 ),
  141.    OPTION_DESCRIPTION( TOGGLE_OPT, HKO_MOVE_VISIBLE_ACTIVE,    VISIBLE_ACTIVE_WINDOW_OPT,  0,                                                                  0, 8, 0,             NULL, 0 ),
  142.    END_OPTION 
  143. };
  144.  
  145.  
  146. #ifdef PREFS
  147.  
  148. # define OPTION_LIST(Descriptions, LabelID) {Descriptions, LabelID}
  149.  
  150. #else
  151.  
  152. # define OPTION_LIST(Descriptions, LabelID) {Descriptions}
  153.  
  154. #endif
  155.  
  156.  
  157.  
  158. OptsList opt_ExecuteCommand[] = {
  159.    OPTION_LIST(ChangeScreenHKOption, SCREEN_OPT ),
  160.    OPTION_LIST(CommandHKOption,      SPECIFICATION_OPT )
  161. };
  162.  
  163. OptsList opt_CloseWindow[] = {
  164.    OPTION_LIST(SelectWindowHKOption, SELECT_OPT )
  165. };
  166.  
  167. OptsList opt_ZipWindow[] = {
  168.    OPTION_LIST(SelectWindowHKOption, SELECT_OPT )
  169. };
  170.  
  171. OptsList opt_IconifyWindow[] = {
  172.    OPTION_LIST(SelectWindowHKOption, SELECT_OPT )
  173. };
  174.  
  175. OptsList opt_ShrinkWindow[] = {
  176.    OPTION_LIST(SelectWindowHKOption, SELECT_OPT ),
  177.    OPTION_LIST(ResizeWindowHKOption, RESIZE_WINDOW_OPT )
  178. };
  179.  
  180. OptsList opt_ExpandWindow[] = {
  181.    OPTION_LIST(SelectWindowHKOption, SELECT_OPT ),
  182.    OPTION_LIST(ResizeWindowHKOption, RESIZE_WINDOW_OPT )
  183. };
  184.  
  185. OptsList opt_MoveWindow[] = {
  186.    OPTION_LIST(SelectWindowHKOption, SELECT_OPT ),
  187.    OPTION_LIST(MoveWindowHKOption,   MOVE_OPT )
  188. };
  189.  
  190.  
  191. OptsList opt_OpenPalette[] = {
  192.    OPTION_LIST(ChangeScreenHKOption, SCREEN_OPT )
  193. };
  194.  
  195. OptsList opt_CycleWindows[] = {
  196.    OPTION_LIST(SelectScreen0HKOption, SELECT_OPT ),
  197.    OPTION_LIST(CycleWindowsHKOption, SPECIFICATION_OPT )
  198. };
  199.  
  200. OptsList opt_ScreenToFront[] = {
  201.    OPTION_LIST(SelectScreen1HKOption, SELECT_OPT )
  202. };
  203.  
  204. OptsList opt_ScreenToBack[] = {
  205.    OPTION_LIST(SelectScreen0HKOption, SELECT_OPT )
  206. };
  207.  
  208. OptsList opt_MoveScreen[] = {
  209.    OPTION_LIST(SelectScreen0HKOption, SELECT_OPT ),
  210.    OPTION_LIST(MoveScreenHKOption,   MOVE_OPT )
  211. };
  212.  
  213. OptsList opt_ShowInterface[] = {
  214.    OPTION_LIST(ChangeScreenHKOption, SCREEN_OPT )
  215. };
  216.  
  217. OptsList opt_InsertDate[] = {
  218.    OPTION_LIST(InsertDateHKOption, SPECIFICATION_OPT )
  219. };
  220.  
  221. OptsList opt_InsertText[] = {
  222.    OPTION_LIST(InsertTextHKOption, SPECIFICATION_OPT )
  223. };
  224.  
  225. OptsList opt_MenuShortcut[] = {
  226.    OPTION_LIST(MenuHKOption, SPECIFICATION_OPT )
  227. };
  228.  
  229.  
  230. OptsList opt_CurrentScreenAsDefPub[1];   /* No option */
  231. OptsList opt_ActivateWorkbench[1];       /* No option */
  232. OptsList opt_BlankDisplay[1];            /* No option */
  233.  
  234.  
  235.  
  236. /*
  237.  * HotKey Action function prototypes
  238.  */
  239.  
  240. #if !defined(PREFS) && !defined(CONV)
  241.  
  242. GLOBAL
  243. void  act_ExecuteCommand(YakHotKey *yhk),        act_CloseWindow(YakHotKey *yhk),
  244.       act_ZipWindow(YakHotKey *yhk),             act_ShrinkWindow(YakHotKey *yhk),
  245.       act_ExpandWindow(YakHotKey *yhk),          act_MoveWindow(YakHotKey *yhk),
  246.       act_CycleWindows(YakHotKey *yhk),          act_OpenPalette(YakHotKey *yhk),
  247.       act_ScreenToFront(YakHotKey *yhk),         act_ScreenToBack(YakHotKey *yhk),
  248.       act_ActivateWorkbench(YakHotKey *yhk),     act_MoveScreen(YakHotKey *yhk),
  249.       act_BlankDisplay(YakHotKey *yhk),          act_InsertText(YakHotKey *yhk),
  250.       act_InsertDate(YakHotKey *yhk),            act_ShowInterface(YakHotKey *yhk),
  251.       act_CurrentScreenAsDefPub(YakHotKey *yhk), act_MenuShortcut(YakHotKey *yhk),
  252.       act_IconifyWindow(YakHotKey *yhk); 
  253. #endif
  254.  
  255.  
  256.  
  257. #if defined (PREFS)
  258.  
  259. # define HOTKEY_DESCRIPTION(name, nameact, optsnum, helpnode) {EMPTY_MINLIST, nameact, helpnode, optsnum, opt_##name}
  260.  
  261. #elif defined (CONV)
  262.  
  263. # define HOTKEY_DESCRIPTION(name, nameact, optsnum, helpnode) {EMPTY_MINLIST, nameact, optsnum, opt_##name}
  264.  
  265. #else
  266.  
  267. # define HOTKEY_DESCRIPTION(name, nameact, optsnum, helpnode) {EMPTY_MINLIST, act_##name, optsnum, opt_##name}
  268.  
  269. #endif
  270.  
  271.  
  272. YakHotKeyType yhktypes[NUM_HOTKEY_TYPES] = {
  273.     HOTKEY_DESCRIPTION( ExecuteCommand,        ExecuteCommand_ACT,        2, "Execute Command" ),
  274.     HOTKEY_DESCRIPTION( CloseWindow,           CloseWindow_ACT,           1, "Close Window" ),
  275.     HOTKEY_DESCRIPTION( ZipWindow,             ZipWindow_ACT,             1, "Zip Window" ),
  276.     HOTKEY_DESCRIPTION( ShrinkWindow,          ShrinkWindow_ACT,          2, "Shrink Window" ),
  277.     HOTKEY_DESCRIPTION( ExpandWindow,          ExpandWindow_ACT,          2, "Expand Window" ),
  278.     HOTKEY_DESCRIPTION( MoveWindow,            MoveWindow_ACT,            2, "Move Window" ),
  279.     HOTKEY_DESCRIPTION( CycleWindows,          CycleWindows_ACT,          2, "Cycle Windows" ),
  280.     HOTKEY_DESCRIPTION( OpenPalette,           OpenPalette_ACT,           1, "Open Palette" ),
  281.     HOTKEY_DESCRIPTION( ScreenToFront,         ScreenToFront_ACT,         1, "Screen to Front" ),
  282.     HOTKEY_DESCRIPTION( ScreenToBack,          ScreenToBack_ACT,          1, "Screen to Back" ),
  283.     HOTKEY_DESCRIPTION( MoveScreen,            MoveScreen_ACT,            2, "Move Screen" ),
  284.     HOTKEY_DESCRIPTION( ActivateWorkbench,     ActivateWorkbench_ACT,     0, "Activate Workbench" ),
  285.     HOTKEY_DESCRIPTION( BlankDisplay,          BlankDisplay_ACT,          0, "Blank Display" ),
  286.     HOTKEY_DESCRIPTION( InsertText,            InsertText_ACT,            1, "Insert Text" ),
  287.     HOTKEY_DESCRIPTION( InsertDate,            InsertDate_ACT,            1, "Insert Date" ),
  288.     HOTKEY_DESCRIPTION( ShowInterface,         ShowInterface_ACT,         1, "Show Yak Interface" ),
  289.     HOTKEY_DESCRIPTION( CurrentScreenAsDefPub, CurrentScreenAsDefPub_ACT, 0, "Set default public screen" ),
  290.     HOTKEY_DESCRIPTION( MenuShortcut,          MenuShortcut_ACT,          1, "Menu shortcut" ),
  291.     HOTKEY_DESCRIPTION( IconifyWindow,         IconifyWindow_ACT,         1, "Iconify Window" )
  292. };
  293.  
  294.  
  295.  
  296. /* allocate memory region of size len+1, copy string to it */
  297. char *
  298. DupStr(char *str)
  299. {
  300.     char *newstr;
  301.     ULONG len;
  302.  
  303.     if (newstr = AllocVec(len=(strlen(str)+1),MEMF_CLEAR))
  304.     {
  305.         CopyMem(str,newstr,len);
  306.     }
  307.     return newstr;
  308. }
  309.  
  310.  
  311.  
  312. /*
  313.  * YakOption manipulation routines
  314.  */
  315.  
  316.  
  317. #if defined(PREFS) || defined(CONV)
  318. void
  319. DefaultOptions(YakHotKey *yhk)
  320. {
  321.     UWORD ol, optslist;
  322.     OptDescription *curdesc;
  323.  
  324.     optslist  = YHK_Takes_Opt(yhk);
  325.  
  326.     for (ol=0; ol<optslist; ol++)
  327.     {
  328.         UWORD as=0;   /* ArgStr number */
  329.         UWORD an=0;   /* ArgNum number */
  330.  
  331.         curdesc = yhktypes[yhk->yhk_Type].yhkt_OptsList[ol].Desc;
  332.  
  333.         while (curdesc->Type != NO_OPT)
  334.         {
  335.             yhk->yhk_Option[ol].Flags |= curdesc->DefFlag;
  336.  
  337.             switch(curdesc->Type)
  338.             {
  339.                 case STRING_OPT:
  340.                     if (curdesc->DefFlag)
  341.                         yhk->yhk_Option[ol].ArgStr[as] = DupStr(curdesc->DefArgStr);
  342.                     as++;
  343.                     break;
  344.  
  345.                 case INTEGER_OPT:
  346.                     yhk->yhk_Option[ol].ArgNum[an] = curdesc->DefArgNum;
  347.                     an++;
  348.                     break;
  349.             }
  350.  
  351.             curdesc++;
  352.         }
  353.     }
  354. }
  355. #endif
  356.  
  357.  
  358. /* free ALL memory associated with options */
  359. static void
  360. FreeYakOptions(YakOption *opt, UWORD type)
  361. {
  362.     UWORD ol, optslist=yhktypes[type].yhkt_OptsNum;
  363.  
  364.     for (ol=0; ol<optslist; ol++)
  365.     {
  366.         OptDescription *curdesc=yhktypes[type].yhkt_OptsList[ol].Desc;
  367.         UWORD as=0;   /* ArgStr number */
  368.  
  369.         while (curdesc->Type != NO_OPT)
  370.         {
  371.             if (curdesc->Type == STRING_OPT)
  372.                 FreeVec(opt[ol].ArgStr[as++]);
  373.  
  374.             curdesc++;
  375.         }
  376.     
  377.         FreeVec(opt[ol].ArgStr);
  378.         FreeVec(opt[ol].ArgNum);
  379.     }
  380.  
  381.     FreeVec(opt);
  382. }
  383.  
  384.  
  385. static YakOption *
  386. AllocYakOptions(UWORD type)
  387. {
  388.     YakOption *newop;
  389.     UWORD ol, optslist=yhktypes[type].yhkt_OptsNum;
  390.  
  391.     if (newop=AllocVec(optslist*sizeof(YakOption), MEMF_CLEAR))
  392.     {
  393.         for (ol=0; ol<optslist; ol++)
  394.         {
  395.             OptDescription *curdesc=yhktypes[type].yhkt_OptsList[ol].Desc;
  396.             UWORD as=0;   /* ArgStr number */
  397.             UWORD an=0;   /* ArgNum number */
  398.  
  399.             while (curdesc->Type != NO_OPT)
  400.             {
  401.                 if (curdesc->Type == STRING_OPT)
  402.                     as++;
  403.                 if (curdesc->Type == INTEGER_OPT)
  404.                     an++;
  405.                 curdesc++;
  406.             }
  407.  
  408.             if (as)
  409.                                 newop[ol].ArgStr = AllocVec(as*sizeof(STRPTR), MEMF_CLEAR);
  410.             if (an)
  411.                                 newop[ol].ArgNum = AllocVec(an*sizeof(LONG), MEMF_CLEAR);
  412.         }
  413.     }
  414.  
  415.     return(newop);
  416. }
  417.  
  418.  
  419.  
  420. /*
  421.  * YakHotKey manipulation routines
  422.  */
  423.  
  424. static void internal_DeleteYakHotKey(YakHotKey *yhk);
  425.  
  426. /* free fields of hotkey */
  427. static void
  428. internal_DeleteYakHotKey(YakHotKey *yhk)
  429. {
  430.     if (yhk->yhk_KeyDef)
  431.         FreeVec(yhk->yhk_KeyDef);
  432.  
  433.     if (yhk->yhk_Name)
  434.         FreeVec(yhk->yhk_Name);
  435.  
  436.     FreeYakOptions(yhk->yhk_Option, yhk->yhk_Type);
  437.  
  438. #ifndef PREFS
  439.     if (yhk->yhk_CxObj)
  440.         DeleteCxObjAll(yhk->yhk_CxObj);
  441. #endif
  442. }
  443.  
  444. /* free ALL memory associated with a hotkey and remove from list */
  445. void
  446. DeleteYakHotKey(YakHotKey *yhk)
  447. {
  448.     Remove((struct Node *)yhk);
  449.     internal_DeleteYakHotKey(yhk);
  450.     FreeVec(yhk);
  451. }
  452.  
  453. /* create or change key definition 
  454. **
  455. ** For prefs program and inactive hotkeys
  456. ** we create a CxObj just to test the specification of hot key.
  457. */
  458. int
  459. ModifyYHKKeyDef(YakHotKey *yhk, char *keystr)
  460. {
  461. #ifndef CONV
  462.     CxObj *filter;
  463.     char  *newdef;
  464.  
  465.     if (filter = HotKey(keystr, broker_mp, (LONG)yhk))
  466.     {
  467. #ifndef PREFS
  468.         /* delete old filter and use new one */
  469.         if (yhk->yhk_CxObj)
  470.             DeleteCxObjAll(yhk->yhk_CxObj);
  471.         /* Add if active */
  472.         if (yhk->yhk_State == YKHK_ACTIVE)
  473.         {
  474.             yhk->yhk_CxObj = filter;
  475.             AttachCxObj(broker, filter);
  476.         }
  477. #endif
  478.  
  479.         /* and store new keystr */
  480.         if (newdef = DupStr(keystr))
  481.         {
  482.             FreeVec(yhk->yhk_KeyDef);
  483.             yhk->yhk_KeyDef = newdef;
  484.             return TRUE;
  485.         }
  486.         PostError(getString(Allocation_ERR));
  487.     }
  488.     else PostError("%s:\n\"%s\"", getString(Invalid_hotkey_specif_ERR), keystr);
  489.  
  490. #else   /* Convert */
  491.         /* and store keystr */
  492.         if (yhk->yhk_KeyDef = DupStr(keystr))
  493.         {
  494.             return TRUE;
  495.         }
  496.         PostError(getString(Allocation_ERR));
  497.  
  498. #endif
  499.  
  500.     return FALSE;
  501. }
  502.  
  503.  
  504. /* change hotkey name */
  505. int
  506. ModifyYHKName(YakHotKey *yhk, char *namestr)
  507. {
  508. #if defined(PREFS) || defined(CONV)
  509.     if (namestr && *namestr)
  510.     {
  511.         char *newstr;
  512.  
  513.         if (newstr = DupStr(namestr))
  514.         {
  515.             FreeVec(yhk->yhk_Name);
  516.             yhk->yhk_Name = newstr;
  517.             yhk->yhk_Node.ln_Name = yhk->yhk_Name;
  518.             return TRUE;
  519.         }
  520.         PostError(getString(Allocation_ERR));
  521.     }
  522.     else PostError(getString(Name_unspecified_for_key_ERR));
  523.  
  524.     return FALSE;
  525. #else
  526.         return TRUE;       /* Yak only! */
  527. #endif
  528. }
  529.  
  530.  
  531.  
  532. /* add a new hotkey of given type */
  533. YakHotKey *
  534. NewYakHotKey(UWORD type)
  535. {
  536.     YakHotKey *newhk;
  537.  
  538.     if (newhk=AllocVec(sizeof(YakHotKey), MEMF_CLEAR))
  539.     {
  540.         newhk->yhk_Node.ln_Name = "unnamed";
  541.         newhk->yhk_Type         = type;
  542.         
  543.         if (!YHK_Takes_Opt(newhk) || (newhk->yhk_Option=AllocYakOptions(type)))
  544.         {
  545.             AddTail(keylist(type), (struct Node *)newhk);
  546.             return newhk;
  547.         }
  548.  
  549.         FreeVec(newhk);
  550.     }
  551.  
  552.     PostError(getString(Allocation_ERR));
  553.  
  554.     return NULL;
  555. }
  556.  
  557. /* initialise list */
  558. void
  559. InitYakHotKeyList(void)
  560. {
  561.     UWORD i;
  562.  
  563.     for (i = 0; i < NUM_HOTKEY_TYPES; i++)
  564.         NewList(keylist(i));
  565. }
  566.  
  567. /* delete whole list */
  568. void
  569. DeleteYakHotKeyList(void)
  570. {
  571.     YakHotKey *yhk;
  572.     UWORD i;
  573.  
  574.     for (i = 0; i < NUM_HOTKEY_TYPES; i++)
  575.         while (yhk = (YakHotKey *)RemHead(keylist(i)))
  576.             DeleteYakHotKey(yhk);
  577. }
  578.  
  579.  
  580. #ifdef PREFS
  581. /* control hotkey */
  582. APTR
  583. ControlYakHotKey(YakHotKey *yhk)
  584. {
  585.     if (!yhk->yhk_Name)
  586.         return Name_unspecified_for_key_ERR;
  587.  
  588.     if (!yhk->yhk_KeyDef)
  589.         return Invalid_hotkey_specif_ERR;
  590.  
  591.     return NULL;    /* All ok */
  592. }
  593. #endif
  594.  
  595.